Conversation
Release prep for v0.5.0. - Version bump: workspace 0.4.0 -> 0.5.0, all intra-workspace dep pins, README.md / docs / lib.rs version refs. - Cargo.lock regen for the workspace, all 4 examples, and both benchmark crates. - CHANGELOG: new [0.5.0] section with a regeneration-required blurb, ### Breaking changes section for #[non_exhaustive] GeneratedFileKind, and footer compare-links updated (also adds the missing v0.4.0 link). - Benchmark refresh: re-ran `task bench-cross` and `task bench-charts`. README tables and SVG charts updated. Adds the `Build + binary encode` section and `buffa (view)` / `prost (bytes)` columns to the encode table that the chart generator now emits but the README didn't have.
|
All contributors have signed the CLA ✍️ ✅ |
rpb-ant
approved these changes
May 5, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Release prep for v0.5.0.
What's in this PR
0.4.0→0.5.0, all intra-workspace dep pins,README.md/docs/guide.md/docs/migration-from-{prost,protobuf}.md/buffa/src/lib.rsversion refs,gh release downloadexamples in the guide.addressbook,conflicts,envelope,logging), and both benchmark crates.## [Unreleased]→## [0.5.0] - 2026-05-05with:ViewReborrow,decode_bytes_to_bytes, and__private::arbitrary_bytes, none of which exist inbuffa0.4.0);### Breaking changessection for#[non_exhaustive]onGeneratedFileKind;[0.4.0]link added).task bench-crossandtask bench-chartson the same hardware as the prior baseline (Intel Xeon Platinum 8488C). README tables and all 25 SVG charts updated; 5 newbuild-encode-*.svgcharts added. TheBinary encodetable picks up thebuffa (view)andprost (bytes)columns the chart generator now emits, and the README gains aBuild + binary encodesection that was previously omitted.What's in 0.5.0
15 commits since
v0.4.0(f444eaba..ffcd6c08):Bytesinto_ownedviaslice_refbytes_fieldspaths through::buffa::bytes::re-exportwrite_toemits fields in field-number orderfile_per_packagecodegen option--version/--helpfor plugin binaries-D warningscleanup__buffa::ancillary typesViewReborrowsafe trait +OwnedView::reborrowarbitrary+Bytesshims;--all-featuresCI stepdecode_bytes_to_byteszero-copy decodeGeneratedFileKind::Companion+apply_companions;#[non_exhaustive]Why 0.5.0, not 0.4.1
#[non_exhaustive]onbuffa_codegen::GeneratedFileKindplus the newCompanionvariant (#91) are SemVer-breaking for any consumer with an exhaustivematch. The known consumer (connect-rust) only uses==and is unaffected, but the contract changed. Several other PRs change codegen output in ways that couple codegen and runtime versions (#84, #90, #95), which is also a minor-bump signal.Benchmark deltas vs prior README baseline
The prior baseline was committed on 2026-04-22 (
a0c668c0, pre-v0.4.0), so the comparison spans the 0.4.0 and 0.5.0 changes. Run-to-run Docker noise is ±5–15%; the largest deltas were investigated with a native bench (±1%) andperfbefore opening this PR.GoogleMessage1decode: 1,014 → 905 MiB/s (−11%) in Docker. Native bench shows no v0.4.0 → v0.5.0 change (both 221.2-221.3 ns / 983 MiB/s). There is a real ~2% delta vs the prior baseline (216.8 ns / 1003 MiB/s), but it shipped in v0.4.0.perf recordattributes it todrop_in_place::<GoogleMessage1>doubling (1.21% → 2.37% of cycles) plusMessage::decodeno longer being inlined into the benchmark closure. Bisect lands the change at Externalize size cache: remove __buffa_cached_size from generated structs #22 (size-cache externalization), which removed__buffa_cached_size: CachedSizefrom generated structs;GoogleMessage1SubMessageshrank from 160 → 152 bytes, crossing a glibc malloc size-class boundary. A small, intentional layout cost from making generated structsSend/Sync. The Docker −11% headline is ~5× the actual effect.AnalyticsEventencode: 656 → 582 MiB/s (−11%) andGoogleMessage1: 2,594 → 2,441 (−6%). Likely attributable to thewrite_tofield-number-order change in codegen: emit write_to fields in field-number order, not by kind #78 (a 0.4.0-era PR) — the previous group-by-kind ordering had cache benefits for messages with mixed field cardinality, traded for cross-implementation byte-equivalence. Intentional, documented trade-off (CHANGELOG codegen: write_to emits singular fields before repeated fields, not in field-number order #75).Other deltas are in the noise band or improvements (
MediaFramedecode +5%,LogRecordJSON decode +5%). No regressions in this release — the deltas vs the README's prior numbers shipped in v0.4.0.Pre-tag verification (matches CI)
cargo test --workspace— 1571 passcargo clippy --workspace --all-features --all-targets -- -D warnings— cleanRUSTDOCFLAGS=-D warnings cargo doc --workspace --all-features --no-deps— cleancargo +1.95 fmt --all --check— cleantask gen-wkt-types— no drifttask lint-md— cleanAfter merge
v0.5.0on the merge commitpublish-crates.ymlconnect-rustto depend onbuffa 0.5.0, adoptapply_companions(replaces thekind: GeneratedFileKind::Ownedworkaround inconnectrpc-codegen/src/codegen.rs), then cut connect-rust0.4.0